home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / examples / dragdrop / dropsite.cpp.z / dropsite.cpp
C/C++ Source or Header  |  2002-04-08  |  4KB  |  158 lines

  1. /****************************************************************************
  2. ** $Id:  qt/dropsite.cpp   3.0.3   edited Oct 12 12:18 $
  3. **
  4. ** Drop site example implementation
  5. **
  6. ** Created : 979899
  7. **
  8. ** Copyright (C) 1997 by Trolltech AS.  All rights reserved.
  9. **
  10. ** This file is part of an example program for Qt.  This example
  11. ** program may be used, distributed and modified without limitation.
  12. **
  13. *****************************************************************************/
  14.  
  15. #include "dropsite.h"
  16. #include "secret.h"
  17. #include <qevent.h>
  18. #include <qpixmap.h>
  19. #include <qdragobject.h>
  20. #include <qimage.h>
  21.  
  22.  
  23. DropSite::DropSite( QWidget * parent, const char * name )
  24.     : QLabel( parent, name )
  25. {
  26.     setAcceptDrops(TRUE);
  27. }
  28.  
  29.  
  30. DropSite::~DropSite()
  31. {
  32.     // nothing necessary
  33. }
  34.  
  35.  
  36. void DropSite::dragMoveEvent( QDragMoveEvent * /*e*/ )
  37. {
  38.     // Check if you want the drag at e->pos()...
  39.     // Give the user some feedback...
  40. }
  41.  
  42.  
  43. void DropSite::dragEnterEvent( QDragEnterEvent *e )
  44. {
  45.     // Check if you want the drag...
  46.     if ( SecretDrag::canDecode( e )
  47.       || QTextDrag::canDecode( e )
  48.       || QImageDrag::canDecode( e )
  49.       || QUriDrag::canDecode( e ) )
  50.     {
  51.     e->accept();
  52.     }
  53.  
  54.  
  55.     // Give the user some feedback...
  56.     QString t;
  57.     for( int i=0; e->format( i ); i++ ) {
  58.     if ( *(e->format( i )) ) {
  59.         if ( !t.isEmpty() )
  60.         t += "\n";
  61.         t += e->format( i );
  62.     }
  63.     }
  64.     emit message( t );
  65.     setBackgroundColor(white);
  66. }
  67.  
  68. void DropSite::dragLeaveEvent( QDragLeaveEvent * )
  69. {
  70.     // Give the user some feedback...
  71.     emit message("");
  72.     setBackgroundColor(lightGray);
  73. }
  74.  
  75.  
  76. void DropSite::dropEvent( QDropEvent * e )
  77. {
  78.     setBackgroundColor(lightGray);
  79.  
  80.     // Try to decode to the data you understand...
  81.  
  82.     QString str;
  83.     if ( QTextDrag::decode( e, str ) ) {
  84.     setText( str );
  85.     setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
  86.     return;
  87.     }
  88.  
  89.     QPixmap pm;
  90.     if ( QImageDrag::decode( e, pm ) ) {
  91.     setPixmap( pm );
  92.     setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
  93.     return;
  94.     }
  95.  
  96.     QStrList strings;
  97.     if ( QUriDrag::decode( e, strings ) ) {
  98.     QString m("Full URLs:\n");
  99.     for (const char* u=strings.first(); u; u=strings.next())
  100.         m = m + "   " + u + '\n';
  101.     QStringList files;
  102.     if ( QUriDrag::decodeLocalFiles( e, files ) ) {
  103.         m += "Files:\n";
  104.         for (QStringList::Iterator i=files.begin(); i!=files.end(); ++i)
  105.         m = m + "   " + *i + '\n';
  106.     }
  107.     setText( m );
  108.     setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
  109.     return;
  110.     }
  111.  
  112.     if ( SecretDrag::decode( e, str ) ) {
  113.     setText( str );
  114.     setMinimumSize( minimumSize().expandedTo( sizeHint() ) );
  115.     return;
  116.     }
  117. }
  118.  
  119. DragMoviePlayer::DragMoviePlayer( QDragObject* p ) :
  120.     QObject(p),
  121.     dobj(p),
  122.     movie("trolltech.gif" )
  123. {
  124.     movie.connectUpdate(this,SLOT(updatePixmap(const QRect&)));
  125. }
  126.  
  127. void DragMoviePlayer::updatePixmap( const QRect& )
  128. {
  129.     dobj->setPixmap(movie.framePixmap());
  130. }
  131.  
  132. void DropSite::mousePressEvent( QMouseEvent * /*e*/ )
  133. {
  134.     QDragObject *drobj;
  135.     if ( pixmap() ) {
  136.     drobj = new QImageDrag( pixmap()->convertToImage(), this );
  137. #if 1
  138.     QPixmap pm;
  139.     pm.convertFromImage(pixmap()->convertToImage().smoothScale(
  140.         pixmap()->width()/3,pixmap()->height()/3));
  141.     drobj->setPixmap(pm,QPoint(-5,-7));
  142. #else
  143.     // Try it.
  144.     (void)new DragMoviePlayer(drobj);
  145. #endif
  146.     } else {
  147.     drobj = new QTextDrag( text(), this );
  148.     }
  149.     drobj->dragCopy();
  150. }
  151.  
  152.  
  153. void DropSite::backgroundColorChange( const QColor & )
  154. {
  155.     // Reduce flicker by using repaint() rather than update()
  156.     repaint();
  157. }
  158.